/*
 * Copyright (c) 2009, Politecnico di Milano
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * 1. Redistributions of source code must retain the above copyright notice,
 *    this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. Neither the name of the Politecnico di Milano nor the names of its
 *    contributors may be used to endorse or promote products derived from
 *    this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */

/*!
 * @file test.h
 * @brief A minimal class to write unit test
 */

#ifndef GAS_TEST_H
#define GAS_TEST_H

/*!
 * @def GAS_UNIT(TEST)
 * @brief An alias for the main of test
 */

#define GAS_UNIT(TEST) \
int main (int argc, char * argv[]) { \
	gas::test<TEST>::run(); \
	return 0; \
}

#define gas_unit GAS_UNIT

namespace gas {

/*!
 * @brief A minimal class to write unit test
 * @param Test A class that contain the execution code for the test
 *
 * To write a unit test is quite simple, first you have to copy the file
 * empty.cpp and rename it as you prefer. Give a name at your test (line 33) and
 * start to code.
 */
template <typename test_>
class test {
	public:
		/*!
		 * @brief Execute the unit test
		 */
		static void run () {
			test_ obj;
			obj.execute();
			obj.check();
		}
};

}

#endif // GAS_TEST_H
